#include <iostream>
#include <algorithm>
#include <set>
#include <iterator>

using std::ostream;
using std::cout; 
using std::endl;
using std::set;
using std::cin;


// // 题目：计算集合的并集
// // 描述：给你两个集合，计算其并集，即 {A} + {B}。
// // 注：不允许出现重复元素，但是 {A} 与 {B}之间可能存在相同元素。
// // 输入格式
// // 输入数据分为三行，第一行有两个数字n,m(0 < n,m<=10000) ，分别表示集合A和集合B的元素个数。后两行分别表示集合 A 和集合 B。每个元素为不超出int范围的整数，每个元素之间用一个空格隔开。
// // 输出格式
// // 输出一行数据，表示合并后的集合，要求从小到大输出，每个元素之间用一个空格隔开。

// // 样例输入1
// //  1 2
// //  1
// //  2 3
// // 样例输出1
// //  1 2 3

// // 样例输入2
// //  1 2
// //  1
// //  1 2
// // 样例输出2
// //  1 2

int main()
{
    int n, m;
    cin >> n;
    cin >> m;
 
    set<int> A;
    while(n--){
        int tmp;
        cin >> tmp;
        A.insert(tmp);
    }
 
    set<int> B;
    while(m--){
        int tmp;
        cin >> tmp;
        B.insert(tmp); 
    }
 
    // 合并
    set<int> merge_ret;
    merge_ret.insert(A.begin(), A.end());
    merge_ret.insert(B.begin(), B.end());
 
    // 输出合并后的集合
    for(auto& elem : merge_ret){
        cout << elem << "  ";
    }
    cout << endl;
    
    return 0;
}